cb609d
@@ -123,38 +123,42 @@
public ClassNameCompleter(String... candidates) {
 
     for (Iterator i = urls.iterator(); i.hasNext(); ) {
       URL url = (URL) i.next();
-      File file = new File(url.getFile());
+      try {
+        File file = new File(url.getFile());
 
-      if (file.isDirectory()) {
-        Set files = getClassFiles(file.getAbsolutePath(), new HashSet(), file, new int[]{200});
-        classes.addAll(files);
+        if (file.isDirectory()) {
+          Set files = getClassFiles(file.getAbsolutePath(), new HashSet(), file, new int[] { 200 });
+          classes.addAll(files);
 
-        continue;
-      }
+          continue;
+        }
 
-      if ((file == null) || !file.isFile()) {
-        continue;
-      }
+        if (!isJarFile(file)) {
+          continue;
+        }
 
-      JarFile jf = new JarFile(file);
+        JarFile jf = new JarFile(file);
 
-      for (Enumeration e = jf.entries(); e.hasMoreElements(); ) {
-        JarEntry entry = (JarEntry) e.nextElement();
+        for (Enumeration e = jf.entries(); e.hasMoreElements();) {
+          JarEntry entry = (JarEntry) e.nextElement();
 
-        if (entry == null) {
-          continue;
-        }
+          if (entry == null) {
+            continue;
+          }
 
-        String name = entry.getName();
+          String name = entry.getName();
 
-        if (isClazzFile(name)) {
-          /* only use class file*/
-          classes.add(name);
-        } else if (isJarFile(name)) {
-          classes.addAll(getClassNamesFromJar(name));
-        } else {
-          continue;
+          if (isClazzFile(name)) {
+            /* only use class file */
+            classes.add(name);
+          } else if (isJarFile(name)) {
+            classes.addAll(getClassNamesFromJar(name));
+          } else {
+            continue;
+          }
         }
+      } catch (IOException e) {
+        throw new IOException(String.format("Error reading classpath entry: %s", url), e);
       }
     }
 
@@ -236,6 +240,10 @@
private static Set getClassFiles(String root, Set holder, File directory, int[]
     return classNames;
   }
 
+  private static boolean isJarFile(File file) {
+    return (file != null && file.isFile() && isJarFile(file.getName()));
+  }
+
   private static boolean isJarFile(String fileName) {
     return fileName.endsWith(jarFileNameExtension);
   }
